Modern computer systems often employ complex architectures that can include a variety of processing units, with varying configurations and capabilities. In a common configuration, all of the processing units are identical, or homogeneous. Less commonly, two or more non-identical or heterogeneous processing units can be used. In this case, the differing processors will have instruction sets, or capabilities that are tailored specifically for certain tasks. Each processor can be more apt for a different type of processing and, extremely, some processors can be inherently unable to perform certain functions entirely. In this case, those functions must be performed, when needed, on a processor that is capable of their performance, and optimally, on the processor best fitted to the task, if doing so is not detrimental to the performance of the system as a whole.
The utility of a computer system is achieved by the process of executing specially designed software, herein referred to as computer programs or codes, on the processing unit(s) of the system. These codes are typically produced by a programmer writing in a computer language and are prepared for execution on the computer system by the use of a compiler. The ease of the programming task, and the efficiency of the ultimate execution of the code on the computer system are greatly affected by the facilities offered by the compiler. Many modern simple compilers produce slowly executing code for a single processor. Other compilers have been constructed that produce relatively extremely rapidly executing code for one or more processors in a homogeneous multi-processing system.
In general, for preparing programs for execution on heterogeneous multi-processing systems, typical modern systems require a programmer to use several compilers and laboriously combine the results of these efforts to construct the final code. To do this, the programmer must partition the source program in such a way that the appropriate processors are used to execute the different functionalities of the code. In particular, where certain processors in the system are not capable of executing particular functions, the partitioned program must perform those functions on a processor that offers that capability. Furthermore, even where multiple processor types are designed to perform the same function, to maximize the performance of the system, the partitioning should assign those functions to the processors that are most expeditious in the performance of said function.
Therefore, there is a need for a system and/or method for computer program functional partitioning for heterogeneous multi-processing systems that addresses at least some of the problems and disadvantages associated with conventional systems and methods.